package com.zhongge.user;

import com.zhongge.book.BookList;
import com.zhongge.operations.IOperation;


@SuppressWarnings("all")//屏蔽所有警告
/**
 * @ClassName User
 * @Description TODO 用户类 定义一个管理员和普通用户的父亲，方便使用多态
 * @Author zhongge
 * @Date 2025/7/14 16:11
 * @Version 1.0
 */
public abstract class User {
    /**
     * 这个用户类：有名字属性，构造方法，菜单的抽象方法
     *  由于User无法表示具体的类，因此我们将他定义为一个抽象类（
     *  注意哦：为什么不是接口，因为接口是存放各种功能的，而抽象类是一个物的抽象描述
     */
    //为什么name设置为peivate?
    /*
          答案：与继承相关的都是要设置为protected的
          而且那name我们是要在子类中进行访问的，所以使用protected
          使得它在同包下+不同包有继承关系下可以访问
    */
    protected String name;//用户名

    /**
     * 在User中还得有一个重要的成员：IOperation[]
     * 他是实现管理员和普通用户的特权划分的基础(如何划分？
     * 在子类构造方法中实现的有
     * )
     */
    protected IOperation[] iOperation;
    /**
     * 有参构造函数是为了到时候在子类中可以通过super(name)实现对父类的初始化
     * @param name
     */
    public User(String name) {
        this.name = name;
    }

    //抽象的菜单方法
    public abstract int menu();

    //操作IOperation中的方法
    public abstract void doIOperation(int choice, BookList bookList);

    public String getName() {
        return this.name;
    }
}
